package cn.jeefast.resthz.webservice.entity;

import com.wondersgroup.cuteinfo.client.util.GUIDUtil;

import javax.validation.constraints.Pattern;

import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotEmpty;

/**
 * CapitalJournal 	资金流水单
 *
 * @author WY
 * @date 2018/10/15 0023
 */
//@Data
@Getter
@Setter
public class CapitalJournal {

    public String getMessageReferenceNumber() {
        return GUIDUtil.generateID();
    }

    /**
     * 报文的唯一标识符，由系统按GUID规则自动产生
     */
    private String messageReferenceNumber;
    /**
     * 资金流水单
     */
    @NotEmpty(message = "资金流水单documentName不能为空!")
    @Length(min = 1, max = 35, message = "无车承运人电子路单length长度在[1,35]之间")
    private String documentName;
    /**
     * 报文版本号
     */
    @NotEmpty(message = "报文版本号documentVersionNumber不能为空!")
    @Length(min = 1, max = 17, message = "报文版本号length长度在[1,17]之间")
    private String documentVersionNumber;
    /**
     * 无车承运人物流交换代码
     */
    @NotEmpty(message = "无车承运人物流交换代码senderCode不能为空!")
    @Length(min = 1, max = 20, message = "无车承运人物流交换代码length长度在[1,20]之间")
    private String senderCode;
    /**
     * 监测平台代码
     */
    @NotEmpty(message = "监测平台代码recipientCode不能为空!")
    @Length(min = 1, max = 20, message = "监测平台代码length长度在[1,20]之间")
    private String recipientCode;
    /**
     * 发送日期时间 YYYYMMDDhhmmss
     */
    @NotEmpty(message = "发送日期时间messageSendingDateTime不能为空!")
    @Pattern(regexp = "^[0-9]{14}$", message = "messageSendingDateTime必须是数字，长度只能等于14位")
    private String messageSendingDateTime;
    /**
     * 报文功能代码 默认9
     */
    @NotEmpty(message = "报文功能代码messageFunctionCode不能为空!")
    @Length(min = 1, max = 3, message = "报文功能代码length长度在[1,3]之间")
    private String messageFunctionCode;
    /**
     * 无车承运人电子路单单证号
     */
    @NotEmpty(message = "资金流水单号不能为空!")
    @Length(min = 1, max = 35, message = "资金流水单号length长度在[1,35]之间")
    private String DecumentNumber;
    /**
     * 无车承运试点企业名称
     */
    @NotEmpty(message = "无车承运试点企业名称carrier不能为空!")
    @Length(min = 1, max = 512, message = "无车承运试点企业名称length长度在[1,512]之间")
    private String carrier;
    /**
     * 车辆牌照号
     */
    @NotEmpty(message = "车辆牌照号vehicleNumber不能为空!")
    @Length(min = 1, max = 35, message = "车辆牌照号length长度在[1,35]之间")
    private String vehicleNumber;
    /**
     * 牌照类型代码
     */
    @NotEmpty(message = "牌照类型代码licensePlateTypeCode不能为空!")
    @Length(min = 1, max = 20, message = "牌照类型代码length长度在[1,20]之间")
    private String licensePlateTypeCode;
    /**
     * 司机端接单时生成的运单号
     */
    @NotEmpty(message = "司机端接单时生成的运单号shippingNoteNumber不能为空!")
    @Length(min = 1, max = 20, message = "司机端接单时生成的运单号length长度在[1,20]之间")
    private String shippingNoteNumber;
    /**
     * 备注（人民币）
     */
//  @Length(min = 1, max = 256, message = "备注length长度在[1,256]之间")
    private String remark;
    /**
     * 付款方式代码
     * 必填，
     * 33 银行汇票；
     * 39 银行转账；
     * 42 现金支付；
     * 7 第三方平台支付；
     * 71 支付宝支付；
     * 72 微信支付；
     * 9 其他方式支付；
     * 91 油卡支付；
     * 92 道路桥闸通行费支付
     */
    @NotEmpty(message = "付款方式代码paymentMeansCode不能为空!")
    @Length(min = 1, max = 18, message = "付款方式代码paymentMeansCodelength长度在[1,18]之间")
    private String paymentMeansCode;
    /**
     * 银行代码
     */
    @Length(min = 1, max = 11, message = "银行代码bankCode length长度在[1,11]之间")
    private String bankCode;
    /**
     * 流水号/序列号
     */
    @NotEmpty(message = "流水号/序列号不能为空!")
    @Length(min = 1, max = 50, message = "流水号/序列号 length长度在[1,50]之间")
    private String sequenceCode;
    /**
     * MonetaryAmount 资金流水金额
     */
    @NotEmpty(message = "资金流水金额MonetaryAmount不能为空!")
    @Pattern(regexp = "^[0-9]{1,15}\\.[0-9]{3}$", message = "资金流水金额MonetaryAmount必须是保留3位小数的数字，长度为1-18位，小数点不计入总长")
    private String monetaryAmount;
    /**
     * 资金流水实际发生时间
     */
    @NotEmpty(message = "资金流水实际发生时间dateTime不能为空!")
    @Pattern(regexp = "^[0-9]{14}$", message = "资金流水实际发生时间dateTime必须是数字，长度只能等于14位")
    private String dateTime;
}
